from datetime import datetime

from comment.models  import db
from werkzeug.security import generate_password_hash,check_password_hash


#用户的模型类
class User(db.Model):

    __tablename__ = 'user'
    id = db.Column(db.BIGINT, primary_key=True,autoincrement=True)
    username = db.Column(db.String(20),doc="用户名")
    #数据表中存放的是加密之后的密文，采用flask提过的hash算法：会生成128位的密文
    password = db.Column(db.String(128),doc="密码")
    icon=db.Column(db.String(5000),doc="用户头像")
    email=db.Column(db.String(50),doc="邮箱")
    nick_name=db.Column(db.String(50),doc="昵称")
    note=db.Column(db.String(500),doc="备注")
    phone=db.Column(db.String(11),doc="手机号")

    login_time=db.Column(db.DateTime,default=datetime.now(),doc="用户登录时间")
    create_time=db.Column(db.DateTime,default=datetime.now(),doc="用户注册时间")
    update_time=db.Column(db.DateTime,default=datetime.now(),onupdate=datetime.now(),doc="用户修改时间")
    status=db.Column(db.Integer,doc="用户状态")  #0表示正常


    #是一个pwd属性的getter函数
    @property
    def pwd(self):
        return self.password

    # 是一个pwd属性的setter函数
    @pwd.setter
    def pwd(self,x_password):
        """
        根据明文的密码，转换成密文
        :param x_password: 密码的明文
        :return: 加密之后的密文
        """
        self.password=generate_password_hash(x_password)  #根据flask提供的算法加密


    def check_pwd(self,x_password):
        """
        验证密码
        :param x_password: 密码的明文
        :return: booler值
        """
        return check_password_hash(self.password,x_password)
